home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-02 | 3.3 KB | 85 lines | [TEXT/CCL2] |
- ;;; This file provides run-time support for the grammar reader
-
- (defparameter *u-env* (make-avnode))
-
- (defvar *vars* nil "the names of variables used in this grammar")
- (defvar *val-prefix* nil "the value prefix")
- (defvar *cat-prefix* nil "the category prefix")
- (defvar *start-cat* nil "the start category")
- (defvar *restrictor-cat* nil "the restrictor category")
- (defvar *rules* nil "the rules of the grammar")
- (defvar *lexical-entries* nil "the lexical entries")
-
- (defvar *current-form* nil "the form currently being parsed")
-
- (defun nullfn (&rest args)
- (declare (ignore args))
- nil)
-
- (defparameter *ulexforms*
- '(symbol #\( #\) #\, #\. #\= #\* #\_ #\[ #\] #\| #\: |#]|
- variables start-category category-prefix value-prefix restrictor -->))
-
-
- (defparameter *avg-readtable*
- (let ((r (copy-readtable)))
- (flet ((turn-off (char) (set-syntax-from-char char #\a r))
- (make-separator (char)
- (set-macro-character char
- #'(lambda (stream char)
- (declare (ignore stream))
- char)
- nil r)))
- (turn-off #\')
- (make-separator #\()
- (make-separator #\))
- (make-separator #\.)
- ; (make-separator #\')
- (make-separator #\,)
- (make-separator #\=)
- (make-separator #\:)
- (make-separator #\*)
- (make-separator #\_)
- (make-separator #\[)
- (make-separator #\])
- (make-separator #\|)
- (set-dispatch-macro-character #\# #\]
- #'(lambda (stream subchar arg)
- (declare (ignore stream subchar arg))
- '|#]|)
- r)
- r)))
-
- (defun read-grammar (stream)
- (let ((pos 0)
- (*readtable* *avg-readtable*))
- (labels ((next-input ()
- (let ((word (read stream)))
- (incf pos) ; move read pointer
- (cons (if (member word *ulexforms*)
- word
- 'symbol)
- word)))
- (parse-error ()
- (error "Reader error at position ~a~&> *current-form*:~{ ~a~}~&> Rest of line: ~a~&> Next line: ~a"
- pos *current-form*
- (read-line stream nil " (eof)")
- (read-line stream nil " (eof)"))))
- (New-Generation)
- (setf *current-form* nil)
- (lalr:lalr-parser #'next-input #'parse-error))))
-
- (set-dispatch-macro-character #\# #\[
- #'(lambda (stream subchar arg)
- (declare (ignore subchar arg))
- (setq *g* (read-grammar stream))
- nil))
- #|
- (set-dispatch-macro-character #\# #\[
- #'(lambda (stream subchar arg)
- (declare (ignore subchar arg))
- (let ((*readtable* *avg-readtable*))
- (dotimes (i 100)
- (format t "~%~s" (read stream))))
- nil))
- |#